home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCMania 39
/
PCMania CD39_2.iso
/
pcmania
/
magia39
/
programa.bas
Wrap
BASIC Source File
|
1995-10-30
|
4KB
|
115 lines
RANDOMIZE TIMER 'Introduce un factor aleatorio
INPUT "¿Número de objetos azules"; noa%
INPUT "¿Número de hormigas"; nh%
DIM coorx%(nh%) 'Coordenada x
DIM coory%(nh%) 'Coordenada y
DIM inx%(nh%) 'Incremento en la coordenada x
DIM iny%(nh%) 'Incremento en la coordenada y
DIM pixel%(nh%) 'Color del pixel sobre el que se mueve una hormiga
DIM carga%(nh%) 'Carga que transporta una hormiga
SCREEN 7
'Se distribuyen las cargas azules
FOR a% = 1 TO noa%
PSET (RND * 100, RND * 100), 1
NEXT
'Se distribuyen las hormigas
FOR a% = 1 TO nh%
repite1:
'Posición inicial de cada hormiga
coorx%(a%) = RND * 100
coory%(a%) = RND * 100
'Incremento de la posición
inx%(a%) = CINT(1.5 - 3 * RND)
iny%(a%) = CINT(1.5 - 3 * RND)
'Se lee el color del pixel sobre el que se va a colocar una hormiga
pixel%(a%) = POINT(coorx%(a%), coory%(a%))
'Se evita que dos hormigas coincidan en el mismo pixel o que
'la hormiga se quede inmóvil
IF pixel%(a%) = 15 OR (inx%(a%) = 0 AND iny%(a%) = 0) THEN GOTO repite1
'Se imprime el punto que representa a la hormiga
PSET (coorx%(a%), coory%(a%))
NEXT
'Bucle principal
DO
FOR a% = 1 TO nh%
'Si se pulsa una tecla se sale del programa
a$ = INKEY$
IF a$ <> "" THEN EXIT DO
'Se almacenan las coordenadas y el color del pixel de la jugada
'anterior
coorx0% = coorx%(a%)
coory0% = coory%(a%)
pixel0% = pixel%(a%)
repite2:
'Se garantiza un movimiento errático de las hormigas, aunque un
'tanto rectilíneo
IF RND < .3 THEN inx%(a%) = CINT(1.5 - 3 * RND)
IF RND < .3 THEN iny%(a%) = CINT(1.5 - 3 * RND)
'Se comprueba que no haya ninguna hormiga en la siguiente posición
pixel%(a%) = POINT(coorx%(a%) + inx%(a%), coory%(a%) + iny%(a%))
IF pixel%(a%) = 15 THEN GOTO repite2
'En caso afirmativo se produce el movimiento
coorx%(a%) = coorx%(a%) + inx%(a%)
coory%(a%) = coory%(a%) + iny%(a%)
'Se evita que las hormigas se salgan fuera de los límites establecidos
IF coorx%(a%) < 1 THEN coorx%(a%) = 1: inx%(a%) = -inx%(a%)
IF coory%(a%) < 1 THEN coory%(a%) = 1: iny%(a%) = -iny%(a%)
IF coorx%(a%) > 100 THEN coorx%(a%) = 100: inx%(a%) = -inx%(a%)
IF coory%(a%) > 100 THEN coory%(a%) = 100: iny%(a%) = -iny%(a%)
'Si el cuadro está vacio y la hormiga cargada se va a la subrutina
'de descarga
IF pixel%(a%) = 0 AND carga%(a%) = 1 THEN GOSUB descarga
'Si el cuadro está ocupado por un objeto y la hormiga descargada se
'va a la subrutina de carga
IF pixel%(a%) = 1 AND carga%(a%) = 0 THEN GOSUB carga
'Se imprime la nueva posición de la hormiga y se borra la anterior
PSET (coorx0%, coory0%), pixel0%
PSET (coorx%(a%), coory%(a%))
NEXT
LOOP
END
descarga:
'Se rastrean los ocho pixels que rodean a la hormiga
FOR largo% = coorx%(a%) - 1 TO coorx%(a%) + 1
FOR ancho% = coory%(a%) - 1 TO coory%(a%) + 1
IF POINT(largo%, ancho%) = 1 THEN suma% = suma% + 1
NEXT
NEXT
'Si en estos hay más de dos objetos azules la hormiga descarga el suyo
IF suma% > 2 THEN carga%(a%) = 0: pixel%(a%) = 1
suma% = 0
RETURN
carga:
'Se rastrean los ocho pixels que rodean a la hormiga
FOR largo% = coorx%(a%) - 1 TO coorx%(a%) + 1
FOR ancho% = coory%(a%) - 1 TO coory%(a%) + 1
IF POINT(largo%, ancho%) = 0 THEN suma% = suma% + 1
NEXT
NEXT
'Si en estos hay más de seis pixels vacios la hormiga carga el suyo
IF suma% > 6 THEN carga%(a%) = 1: pixel%(a%) = 0
suma% = 0
RETURN